1 Objectif : Dynamique de population des poissons d’eau douce de Bretagne

Script : 00-Selection_pop_ope

L’objectif de cette étude est d’évaluer les tendances démographiques des poissons d’eau douce de Bretagne. Ce travail vient en appui à la révision de la liste rouge régionale. Il s’agit, dans un premier temps, de produire un tableau de bord combinant divers indicateurs de la dynamique des populations des poissons d’eau douce de Bretagne depuis 1990.

Ce script a pour objectif de constituer un premier dataframe regroupant les données de la base ASPE d’une zone géographique déterminée. Il s’agit de constituer un jeu de données regroupant différents réseaux de pêches à travers la région Bretagne. Ces données constitueront la base pour l’étude des séries temporelles qui suivra.

2 Installation

2.1 Chargement des packages, fonctions et des données

# Chargement des packages ----
library(aspe)
library(tidyverse)
library(mapview)
library(COGiter)
library(sf)
library(wesanderson)

# Chargement des fonctions ----
source(file = "../R/borner_series.R")

# Chargement des données ----
rdata_tables <- misc_nom_dernier_fichier(
  repertoire = "../../../../projets/ASPE/raw_data/rdata",
  pattern = "^tables")
load(rdata_tables)

# Chargement de la palette de couleur ---- 
pal <- wes_palette("AsteroidCity1")
pal2 <- wes_palette("FantasticFox1")
pal3 <- c("#007844", "#92D050", "#0087C1", "#A97B30","#FCEE21", "#00AEEF", "#1D1D1B", "#B9D9EB")

2.2 Paramètres

Plusieurs paramètres sont fixés dans cette étude. Ces paramètres sont modifiables selon les préférences et les objectifs visés. Parmi ces paramètres :

  • La taille du buffer (en mètres) : zone tampon entourant le département de la Bretagne.

  • Les réseaux de pêches : sélection des différents réseaux : RCS - Réseau de Contrôle de Surveillance ; RRP - Réseaux de Référence Pérenne ; RHP - Réseau Hydrobiologique Piscicole ; RCA - Réseau de contrôle additionnel ; RCO – Réseau Contrôle opérationnel.

Dans notre étude, seul les trois premiers réseaux seront utilisés. Ces réseaux seront testés ensemble puis individuellement afin d’écarter un risque de biais d’objectif. En effet, les réseaux n’ont pas tous les mêmes “objectifs d’observations” : ex. le réseaux RPP est un réseau “témoin”, qui ne doit pas subir d’influences extérieures, il doit seulement informer des potentiels effets provoqué par le changement climatique.

  • Les types de pêches : sélection des différents types de pêche : pêche partielle par point, pêche par ambiance, pêche partielle sur berge, pêche complète à un ou plusieurs passages.

  • Le nombre minimum d’années composant les séries de pêches.

  • Le nombre d’années manquantes consécutives maximum sur les séries de pêches.

## Taille du buffer (en mètres) ----
taille_buffer <- 1000

## Réseaux de pêches ----
mes_reseaux <- c("RCS – Réseau de Contrôle de Surveillance",
                 "RRP – Réseau de Référence Pérenne",
                 "RHP – Réseau Hydrobiologique Piscicole")

## Types de pêches ----
mes_types_de_peche <- c("Pêche complète à un ou plusieurs passages",
                   "Pêche partielle par points (grand milieu)",
                   "Pêche par ambiances",
                   "Pêche partielle sur berge")

## Nombre minimum d'années sur les séries de pêches  ----
n_mini_annee <- 9 

## Nombre d'années manquantes maximum sur cette série de pêches dans les données ----
n_max_manquant <- 2

3 Constitution du jeu de données

Création d’une passerelle qui permettra de joindre l’ensemble des différentes données utilisées. Cette passerelle permettra, au cours de l’étude, de joindre d’autres tables de données contenants différentes informations sur les stations/opérations/poissons contenu dans la base ASPE en utilisant la fonction “mef_ajouter_…”.

## Création d'une passerelle ----
passerelle <- mef_creer_passerelle()

3.1 Sélection de l’aire géographique

## Sélection de l'aire géographique : choix des départements ----
# Pour notre étude : La Bretagne (22, 29, 35, 56)
mes_depts <- departements_metro_geo %>% 
  filter (DEP %in% c("22", "29", "35", "56"))
# Visualisation de la zone géographique sélectionnée ----
mes_depts %>%
  mapview::mapview()

3.2 Mise en place du buffer

Notre étude se concentre sur la Bretagne. Toutes les stations bretonnes sont regroupées dans un jeu de données initial. Ici, il ne s’agit pas de réfléchir à l’échelle des bassins versants, leur limite n’étant pas toujours évidente. Cependant, un buffer est mis en place aux alentours des limites départementales afin de considérer les stations aux emplacements ambiguës et englober les stations frontalières aux limites départementales. La limite du buffer est donc à considérer en fonction de l’aire géographique considérée (cf I.B Paramètres).

## Mise en place d'un buffer ----
buffer <- st_buffer(mes_depts, 
                      taille_buffer) # PARAMETRE

# Visualisation de l'aire géographique et du buffer ----
mapview(
  list(buffer, mes_depts),
  layer.name = c("Bretagne avec un buffer de 1 km", "Bretagne"),
  col.regions = list("#0A9F9D", "#FDE725FF")
)

3.3 Points de prélèvements

Les points de prélèvements sont alors représentés au sein de cette aire géographique.

# Visualisation des points de prélèvements présents dans l'aire géographique sélectionnée
pop_dep <- point_prelevement %>%
  sf::st_as_sf(coords = c("pop_coordonnees_x", 
                          "pop_coordonnees_y"),
               crs = 2154) %>% 
  aspe::geo_attribuer(buffer) %>% 
  filter(!is.na(DEP))
# Dessiner la carte
ggplot(regions_metro_geo) +
  geom_sf(data = mes_depts) +
  geom_sf(data = buffer) +
  geom_sf(data = pop_dep, aes(color = DEP), size = 2) +
  scale_color_manual(values = pal3) +
  theme_bw() +
  # Ajouter une légende pour la variable DEP
  labs(color = "Département")

mapview(
  list(buffer, mes_depts),
  layer.name = c("Bretagne avec un buffer de 1 km", "Bretagne"),
  col.regions = list("#0A9F9D", "#FDE725FF")
) + mapview (pop_dep, shape = 20, color = "darkred", lwd =1)

Après visualisation de l’aire géographique et de ses points de prélèvements associées, une sauvegarde est réalisée dans la passerelle.

# Sauvegarde des points de prélèvements sélectionnés dans la passerelle ----
passerelle <- passerelle %>%
  filter(pop_id %in% pop_dep$pop_id)

3.4 Réseaux de pêche

Chaque point de prélèvement sélectionné correspond à un ou plusieurs types de réseaux. Une sélection des types de réseaux souhaités dans l’étude est réalisée. Dans le cas de l’actualisation de la liste rouge régionale de Bretagne des poissons d’eau douce, seulement 3 réseaux seront retenus : le RCS, le RHP et le RRP. Les données de réseaux sont ajoutées à l’aide de la passerelle.

## Sélection des réseaux de pêche ---- 
passerelle <- passerelle %>%
  mef_ajouter_objectif() %>% 
  filter(obj_libelle %in% mes_reseaux)   # PARAMETRE

3.5 Types de pêche

Sur chacun des points de prélèvements sélectionnés, des opérations de pêches sont réalisées. Une sélection des différents types de pêche (pro_libelle) souhaités dans l’étude est réalisée.

## Création d'un dataframe "mes_ope" et sélection des types de pêches ---- 
ope_pro_libelle <- passerelle %>% 
  mef_ajouter_type_protocole() %>%
  filter(pro_libelle %in% mes_types_de_peche) %>%  # PARAMETRE
  select(sta_id:ope_id, pro_libelle) %>% 
  distinct()

3.6 Opération de pêche

Pour chacun des points de prélèvements, plusieurs opérations peuvent être réalisées une même année. Dans notre étude, nous souhaitons seulement conserver l’opérations de pêches les plus tardives.

## Sélection d'une seule pêche par années, par point de prélèvement

ope_selection <- ope_pro_libelle %>%
  mef_ajouter_ope_date() %>% 
  group_by(pop_id, annee) %>% 
  filter(ope_date == max(ope_date)) # Pour le cas des sites avec plusieurs pêches la même année, on sélectionne par défaut la pêche la plus tardive

3.7 Caractéristiques des séries temporelles

Après avoir sélectionné les réseaux et les types de pêches, nous souhaitons sélectionner les sites (points de prélèvements) qui ont été suivis pendant suffisamment longtemps. Il s’agit de constituer les séries temporelles les plus longues possible. Une identification du nombre d’années de données disponibles par point de prélèvement est effectuée. Afin d’obtenir une robustesse statistique suffisante, une sauvegarde des stations avec au moins 10 années de données sur un même point de prélèvement est appliquée. C’est actions sont réalisée grâce à la fonction “borner_series”.

## Sélection des stations ayant 2 années maximum de suivis consécutifs manquants par station ----
pop_serie_tempo <- ope_selection %>%
  borner_series(var_id_site = pop_id,     #Utilisation de la fonction "borner_series"
                var_temp = annee,
                max_nb_obs_manquantes = n_max_manquant) # PARAMETRE

Une sélection est ensuite réalisée au niveau des séries de pêches avec au moins 9 années de données sans que les opérations successives ne soient éloignées de plus de 2 ans.

pop_serie_tempo <- pop_serie_tempo %>%
  filter(n_opes > n_mini_annee) %>% # PARAMETRE
  select(-annee_mini) %>% 
  pull(pop_id)

3.7.1 Représentation graphique

Une représentation graphique bilan des séries temporelles constituées et des types de pêches associées aux opérations des séries est réalisé. Les libbelés des points de prélèvements sont remis en forme et ajoutés aux données.

ope_selection <- ope_selection %>% 
  filter(pop_id %in% pop_serie_tempo) %>% 
  mef_ajouter_libelle_site()

# Définir les règles de modification des libellés
regles_modification <- tribble(
  ~ancien_libelle,                        ~nouveau_libelle,
  "VILAINE à SAINTE-MARIE",               "Vilaine à Sainte-Marie",
  "Le Semnon à Poligne",                  "Semnon à Poligne",
  "L'Aulne à Locmaria-berrien",           "Aulne à Locmaria-berrien",
  "La Claie à Pleucadeuc",                "Claie à Pleucadeuc",
  "Le Ruisseau de Loup à Plougonver",     "Ruisseau de Loup à Plougonver",
  "La Cantache à Dompierre-du-chemin",    "Cantache à Dompierre-du-chemin",
  "La Rivière de Pont l'abbé à Peumerit", "Rivière de Pont l'abbé à Peumerit",
  "Le Kerambellec à Brasparts",           "Kerambellec à Brasparts",
  "Le Gouessant à Andel",                 "Gouessant à Andel",
  "La Vilaine à Chateaubourg",            "Vilaine à Chateaubourg",
  "L'Arguenon à Dolo",                    "Arguenon à Dolo",
  "Le Ruisseau la Mignonne (bras naturel ou aménagé) à Saint-urbain", "Ruisseau la Mignonne à Saint-urbain",
  "Le Jet (bras naturel ou aménagé) à Elliant",  "Jet à Elliant",
  "L'Ille à Montreuil-sur-ille",          "Ille à Montreuil-sur-ille",
  "L'Ével à Baud",                        "Ével à Baud",
  "L' Aven à Melgven",                    "Aven à Melgven",
  "Le Guyoult à Mont-dol",                "Guyoult à Mont-dol",
  "La Rance à Ereac",                     "Rance à Ereac",
  "Le Couesnon à Romazy",                 "Couesnon à Romazy",
  "L' Inam à Lanvenegen",                 "Inam à Lanvenegen",
  "Le Nanson à Parigne",                  "Nanson à Parigne",
  "LEGUER à PLOUBEZRE",                   "Leguer à Ploubezre",
  "TRIEUX à PLESIDY",                     "Trieux à Plesidy",
  "Le Larhon à Saint-maudan",             "Larhon à Saint-maudan",
  "Le Kersault à Locarn",                 "Kersault à Locarn",
  "La Sarre à Melrand",                   "Sarre à Melrand",
  "Le Ruisseau le Sedon à Guegon",        "Ruisseau le Sedon à Guegon",
  "L'Ellé au Faouet",                     "Ellé au Faouet",
  "L'Élorn à la Roche-maurice",           "Élorn à la Roche-maurice",
  "L' Aër au Croisty",                    "Aër au Croisty",
  "La Vilaine à  Guichen",                "Vilaine à Guichen",
  "Le Ruisseau l' Yvel à Neant-sur-yvel", "Ruisseau Yvel à Neant-sur-Yvel",
  "L'Élorn à Commana",                    "Élorn à Commana",
  "L'Horn à Mespaul",                     "Horn à Mespaul",
  "Le Tarun à Plumelin",                  "Tarun à Plumelin",
  "ISOLE à SAINT-THURIEN",                "Isole à Saint-Thurien",
  "L'Aff à Paimpont",                     "Aff à Paimpont",
  "LIE à LA PRENESSAYE",                  "Lié à la Prenessaye",
  "Le Gozvoalet à Langonnet",             "Gozvoalet à Langonnet",
  "GARVAN A DINEAULT",                    "Garvan à Dineault",
  "MILIN PRAT A LOGUIVY-PLOUGRAS",        "Milin Prat à Loguivy-Plougras",
  "MARZAN À MARZAN",                      "Marzan à Marzan")

ope_selection <- ope_selection %>%
  left_join(regles_modification, by = c("pop_libelle" = "ancien_libelle")) %>%
  mutate(n_pop_libelle = coalesce(nouveau_libelle, pop_libelle)) %>%
  select(-nouveau_libelle,
         -pop_libelle) %>% 
  rename(pop_libelle = n_pop_libelle)

Réalisation de la représentation graphique :

## Représentation graphique des stations sélectionnées et des types de pêches associées ----

ope_selection %>% 
  ggplot(aes(x = as.character(pop_libelle),
             y = annee, 
             fill= pro_libelle),
         legend.background = element_rect(fill="#ffffff")) + 
  scale_fill_manual(values= pal) +
  geom_tile() +
  labs(title = "Les points de prélèvements sélectionnés et les types de pêches associées",
       subtitle = "Région Bretagne", 
       x ="",
       y = "Années",
       fill = "Type de pêche") + 
  theme_light(base_size = 11) +
  theme(panel.grid.major = element_line(color="#ffffff", size = 0.1),
        panel.grid.minor = element_line(color = "#ffffff"),
        panel.background = element_rect(fill="#faf0e6"),
        legend.position = "bottom") +
  coord_flip() +
  scale_y_continuous(breaks = seq(min(ope_selection$annee), max(ope_selection$annee), by = 3))

3.8 Visualisation des efforts de pêche par points de prélèvements dans l’aire géographique sélectionnée

ope_selection_sta <- ope_selection %>%
  group_by(sta_id) %>% 
  mutate(nb_ope_par_sta = n_distinct(ope_id)) %>% 
  select(sta_id, ope_id, pop_id, nb_ope_par_sta) %>%
  left_join(point_prelevement) %>% 
  sf::st_as_sf(coords = c("pop_coordonnees_x", 
                           "pop_coordonnees_y"),
                crs = 2154) %>% 
  aspe::geo_attribuer(buffer)
# Pour la visualisation graphique je n'ai besoin que d'un seul exemple d'ope_id par station
ope_selection_sta_n <- ope_selection_sta %>% 
  group_by(sta_id) %>% 
  sample_n(1) %>% 
  ungroup()


mapview(list(buffer, mes_depts),
        layer.name = c("Bretagne avec un buffer de 1 km", "Bretagne"),
        col.regions = list("#440154FF", "#FDE725FF")) + 
  mapview(ope_selection_sta_n,
          layer.name = "Nombre operation par station", 
          size_var = "nombre_ope_sta",
          cex = "sta_id",
          lwd = 0.2,
          col.regions = "#D693E0",
          alpha = 0.8,
          legend = TRUE,
          labels = list(text = ope_selection_sta_n$nb_ope_par_sta, cex = 1.5))
# --- Enregistrement des opérations de pêches retenues dans la passerelle
passerelle <- passerelle %>% 
  filter(ope_id %in% ope_selection$ope_id)

4 Vérification du jeu de données

Il s’agit ici de détecter des erreurs potentielles dans le jeu de données constitué.

4.1 Les points de prélèvements et les stations

Pour chacune des pêches réalisées, des points de prélèvement attachés à des stations sont inscrits dans la base. Il s’agit ici d’identifier pour chaque station combien de point de prélèvement sont associés. Le résultat permet une vérification des doublons.

Remarque : l’idée étant d’obtenir les séries chronologiques les plus longues, il est important de vérifier si une fusion de point de prélèvement est envisageable (en cas de proximité géographique).

Il s’agit également d’identifier pour chaque point de prélèvement combien de station sont combinées (le résultat devant être égale à 1, sinon une erreur est probable).

### Recherche erreur : 1 point de prélèvement = 1 seule station ----

pop_plusieurs_sta <- ope_selection %>% 
  mef_ajouter_libelle_site(origine_libelle = "station_sandre") %>% 
  rename(sta_libelle = sta_libelle_sandre) %>%  
  mef_ajouter_libelle_site(origine_libelle = "auto") %>% 
  select(-pro_libelle, -ope_id) %>% 
  distinct()

pop_plusieurs_sta <- pop_plusieurs_sta %>% 
  group_by(pop_id) %>% 
  summarise(n_sta = n_distinct(sta_id)) %>% 
  filter(n_sta>1, !is.na(pop_id)) %>% 
  pull(pop_id) %>% 
  length()

Nombre de points (pop_id) correspondant à plusieurs stations (sta_id) : 0

### Recherche erreur : 1 station = ? opération(s) (vérification doublons) ----
sta_plusieurs_pop <- ope_selection %>% 
  mef_ajouter_libelle_site(origine_libelle = "station_sandre") %>% 
  rename(sta_libelle = sta_libelle_sandre) %>%  
  mef_ajouter_libelle_site(origine_libelle = "auto") %>% 
  select(-pro_libelle, -ope_id) %>% 
  distinct()

sta_plusieurs_pop_1 <- sta_plusieurs_pop %>% 
  group_by(sta_id) %>% 
  summarise(n_pop = n_distinct(pop_id)) %>% 
  filter(n_pop>1, !is.na(sta_id)) %>% 
  pull(sta_id) %>% 
  unique()

sta_plusieurs_pop <- sta_plusieurs_pop %>% 
  ungroup() %>% 
  filter(sta_id %in% sta_plusieurs_pop_1) %>% 
  dplyr::select (sta_id, sta_libelle, pop_id, pop_libelle) %>% 
  dplyr::distinct() %>% 
  arrange(sta_libelle)

sta_plusieurs_pop %>% 
  flextable::flextable() %>% 
  flextable::autofit() %>% 
  flextable::colformat_int(j = c(1, 3), big.mark = " ")

sta_id

sta_libelle

pop_id

pop_libelle

5 Sauvegarde :

# SAUVEGARDE ----
save(pop_serie_tempo,
     ope_selection,
     passerelle,
     file = "../processed_data/selection_pop_ope.rda")